home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / ozon.ru.ifs < prev    next >
Text File  |  2005-03-13  |  8KB  |  275 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=Yuri Vlasov (<link>wildfish@mail.ru</link>)
  8. Title=OZON.RU
  9. Description=Import data & picture from OZON.RU
  10. Site=www.ozon.ru
  11. Language=RU
  12. Version=1.1 (08.02.2005)
  13. Requires=3.5.0
  14. Comments=OZON.RU ±εΣσ≡µΦ≥ επ≡ε∞φεσ ΩεδΦ≈σ±≥Γε ε∩Φ±αφΦΘ ⌠Φδⁿ∞εΓ ∩δ■± ±α∞≤■ ßεδⁿ°≤■ Γ ≡≤φσ≥σ ΩεδδσΩ÷Φ■ ßεδⁿ°Φ⌡ εßδεµσΩ Ω ⌠Φδⁿ∞α∞
  15. License=
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program ozon_ru;
  23.  
  24. const
  25.   BaseAddress = 'http://www.ozon.ru/';
  26.  
  27. var
  28.   MovieName: string;
  29.  
  30. //==============================================================================
  31.   procedure AnalyzePage(Address: string);
  32.   var
  33.     Page: TStringList;
  34.     LineNr: Integer;
  35.     Line: string;
  36.     TextBlock: string;
  37.     BeginPos, EndPos: Integer;
  38.     s: string;
  39.   begin
  40.   Page := TStringList.Create;
  41.   Page.Text := GetPage(Address);
  42.   if pos('<TITLE>╬╟╬═ - ╨στ≤δⁿ≥α≥√ ∩εΦ±Ωα</TITLE>', Page.Text) = 0 then
  43.     begin
  44.     if CanSetField(fieldURL) then
  45.       SetField(fieldURL, Address);
  46.     AnalyzeVideoPage(Page);
  47.     end
  48.   else
  49.     begin
  50.     PickTreeClear;
  51.     LineNr := FindLine('═αΘΣσφε ', Page, 0);
  52.     if LineNr > -1 then
  53.       begin
  54.       PickTreeAdd('╘Φδⁿ∞√', '');
  55.       AddMoviesTitles(Page, LineNr);
  56.       end;
  57.  
  58.     LineNr := FindLine('╤≥≡αφΦ÷α:', Page, 0);
  59.     if LineNr > -1 then
  60.       begin
  61.       Line := Page.GetString(LineNr);
  62.       BeginPos := Pos('╤≥≡αφΦ÷α 2" href="', Line) + Length('╤≥≡αφΦ÷α 2" href="');
  63.       EndPos := Pos('>2</a>', Line);
  64.       s := Copy(Line, BeginPos, EndPos - BeginPos);
  65.       PickTreeMoreLink(BaseAddress + s);
  66.       end;
  67.     if PickTreeExec(Address) then
  68.       AnalyzePage(Address);
  69.     end;
  70.   Page.Free;
  71. end;
  72.  
  73. //==============================================================================
  74.   function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  75.   var
  76.     i: Integer;
  77.   begin
  78.   Result := -1;
  79.   if StartAt < 0 then
  80.     StartAt := 0;
  81.   for i := StartAt to List.Count-1 do
  82.     if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then
  83.       begin
  84.       result := i;
  85.       Break;
  86.       end;
  87.   end;
  88.  
  89. //==============================================================================
  90.   procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
  91.   var
  92.     Line: string;
  93.     MovieTitle, MovieAddress, s: string;
  94.     StartPos, EndPos: Integer;
  95.   begin
  96.     repeat
  97.     Line := Page.GetString(LineNr);
  98.     StartPos := Pos('class="big1">', Line);
  99.     if StartPos > 0 then
  100.       begin
  101.       StartPos := Pos('<a href="/context/detail/id/', Line);
  102.       if StartPos > 0 then
  103.         begin
  104.         StartPos := StartPos + Length('<a href="');
  105.         MovieAddress := Copy(Line, StartPos, pos('" class=', Line) - StartPos);
  106.  
  107.         StartPos := pos('">', Line) + Length('">');
  108.         MovieTitle := Copy(Line, StartPos, pos('</a>', Line) - StartPos);
  109.         LineNr := LineNr + 1;
  110.         Line := Page.GetString(LineNr);
  111.         StartPos := pos('<small>', Line) + Length('<small>');
  112.         s := Copy(Line, StartPos, pos('</small>', Line) - StartPos);
  113.         EndPos := Pos('<br>', s);
  114.         if EndPos <> 0 then
  115.           begin
  116.           MovieTitle := MovieTitle + '(' + Copy(s, 1, EndPos-1) + ')';
  117.           Delete (Line, 1, StartPos+EndPos-2);
  118.           StartPos := Pos('<br>', Line) + Length('<br>');
  119.           end
  120.         else
  121.           StartPos := 1;
  122.  
  123.         EndPos := Pos('(', Line);
  124.         MovieTitle := MovieTitle + ' (' + Copy(Line, StartPos, EndPos-StartPos-1) + ')';
  125.  
  126.         HTMLDecode(MovieTitle);
  127.         HTMLRemoveTags(MovieTitle);
  128.         PickTreeAdd(MovieTitle, BaseAddress + MovieAddress);
  129.         end;
  130.       end;
  131.  
  132.     LineNr := LineNr + 1;
  133.     until LineNr > Page.Count;
  134.   end;
  135.  
  136. //==============================================================================
  137.   function GetText (Line: string; sBegin, sEnd: string): string;
  138.   var
  139.     BeginPos, EndPos: Integer;
  140.     s: string;
  141.   begin
  142.   Result := '';
  143.   BeginPos := Pos(sBegin, Line) + Length(sBegin);
  144.   EndPos := Pos(sEnd, Line);
  145.   if (BeginPos = 0) then BeginPos := 1;
  146.   if (EndPos = 0) then EndPos := Length(Line);
  147.  
  148.   s := Copy(Line, BeginPos, EndPos - BeginPos);
  149.   HTMLDecode(s);
  150.   HTMLRemoveTags(s);
  151.   Result := Trim(s);
  152.   end;
  153.  
  154. //==============================================================================
  155.   procedure AnalyzeVideoPage(Page: TStringList);
  156.   var
  157.     Line, Value, Value2, FullValue: string;
  158.     LineNr, MovieLength: Integer;
  159.     BeginPos, EndPos: Integer;
  160.     MovieName, s: string;
  161.   begin
  162.   LineNr := FindLine('<TITLE>╬╟╬═ - [', Page, 0);
  163.   if LineNr = -1 then exit;
  164.  
  165.   // Title
  166.   MovieName := GetText(Page.GetString(LineNr), '<TITLE>╬╟╬═ - [', ']');
  167.   if CanSetField(fieldTranslatedTitle) then
  168.     SetField(fieldTranslatedTitle, MovieName);
  169.  
  170.   //Original Title
  171.   if CanSetField(fieldOriginalTitle) then
  172.     begin
  173.     LineNr := FindLine('<BIG class="big2">' + MovieName, Page, 0);
  174.     if LineNr <> -1 then
  175.       begin
  176.       Line := Page.GetString(LineNr);
  177.       if Pos('><font color="#666666">', Line) <> 0 then
  178.         s := GetText(Line, '><font color="#666666">', '></font>')
  179.       else
  180.         s := MovieName;
  181.       SetField(fieldOriginalTitle, s);
  182.       end;
  183.     end;
  184.  
  185.   //Year, Length, Country
  186.   LineNr := FindLine('╒α≡αΩ≥σ≡Φ±≥ΦΩΦ ΓΦΣσεφε±Φ≥σδσΘ', Page, 0);
  187.   if LineNr <> -1 then
  188.     begin
  189.     Line := Page.GetString(LineNr);
  190.     if CanSetField(fieldYear) then
  191.       begin
  192.       BeginPos := Pos(AnsiUpperCase('╒α≡αΩ≥σ≡Φ±≥ΦΩΦ ΓΦΣσεφε±Φ≥σδσΘ'), AnsiUpperCase(Line)) + Length('╒α≡αΩ≥σ≡Φ±≥ΦΩΦ ΓΦΣσεφε±Φ≥σδσΘ');
  193.       EndPos := Pos(AnsiUpperCase('╩Φφε±≥≤ΣΦ '), AnsiUpperCase(Line));
  194.       if EndPos = 0 then EndPos := Length(Line);
  195.       Line := Copy(Line, BeginPos, EndPos);
  196.       SetField(fieldYear, GetText(Line, '<div>', 'π.,'));
  197.       end;
  198.  
  199.     s := 'π.,';
  200.     Delete (Line, 1, Pos(s, Line)+Length(s)-1);
  201.     if CanSetField(fieldLength) then
  202.       SetField(fieldLength, GetText(Line, '<B>', '∞Φφ.'));
  203.  
  204.     if CanSetField(fieldCountry) then
  205.       begin
  206.       s := '∞Φφ.';
  207.       Delete (Line, 1, Pos(s, Line)+Length(s));
  208.       s := GetText(Line, '</B>', '<br>');
  209.       BeginPos := Pos(' ', s);
  210.       if BeginPos <> 0 then
  211.         begin
  212.         BeginPos := BeginPos + 1;
  213.         s := Copy(s, BeginPos, Length(s));
  214.         end;
  215.       SetField(fieldCountry, s);
  216.       end;
  217.     end;
  218.  
  219.   //Description
  220.   if CanSetField(fieldDescription) then
  221.     begin
  222.     LineNr := FindLine('class="detail_leftcol"', Page, 0);
  223.     if LineNr > -1 then
  224.       begin
  225.       Line := Page.GetString(LineNr);
  226.       s := 'class="vertpadd">';
  227.       Delete (Line, 1, Pos(s, Line)+Length(s)-1);
  228.       s := GetText(Line, '', '</td></tr>');
  229.       SetField(fieldDescription, s);
  230.       end;
  231.     end;
  232.  
  233.   //Picture
  234.   if CanSetPicture then
  235.     begin
  236.     LineNr := FindLine('document.cover', Page, 0);
  237.     if LineNr > -1 then
  238.       begin
  239.       Line := Page.GetString(LineNr);
  240.       s := 'document.cover';
  241.       Delete (Line, 1, Pos(s, Line) + Length(s)-1);
  242.       s := 'small';
  243.       Delete (Line, 1, Pos(s, Line) + Length(s)-1);
  244.       BeginPos := Pos(',', Line) + 2;
  245.       EndPos := Pos('jpg', Line) + 3;
  246.       if (BeginPos <> 0) and (EndPos <> 0) then
  247.         begin
  248.         s := Copy(Line, BeginPos, EndPos - BeginPos);
  249.         s := Trim(s);
  250.         GetPicture(BaseAddress + s);
  251.         end;
  252.       end;
  253.     end;
  254.  
  255.   //DisplayResults;
  256. end;
  257.  
  258. //==============================================================================
  259. //==============================================================================
  260. //==============================================================================
  261. begin
  262.   if CheckVersion(3,5,0) then
  263.   begin
  264.     MovieName := GetField(fieldTranslatedTitle);
  265.     if MovieName = '' then
  266.       MovieName := GetField(fieldOriginalTitle);
  267.  
  268.     if Input('Import from Ozon.ru', 'Enter the title of the movie:', MovieName) then
  269.     begin
  270.       AnalyzePage('http://www.ozon.ru/?context=video_search_list&searchstring='+UrlEncode(MovieName));
  271.     end;
  272.   end else
  273.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  274. end.
  275.